package com.corpgovernment.common.base;

import java.io.Serializable;
import java.util.Date;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class BaseUserInfo implements Serializable {

    public BaseUserInfo() {}

    private static final long serialVersionUID = 5923805756979809322L;
    /**
     * 用户员工id
     */
    @JsonAlias("userId")
    private String uid;
    private String userName;

    private String token;

    /**
     * 是否为后台用户
     */
    private Boolean bgUser;

    /**
     * 前台用户的组织id
     * 有可能是部门id、也有可能是公司id
     */
    private String orgId;
    /**
     * 部门名称
     */
    private String orgName;

    private String source;

    private String deviceId;

    /**
     * 前台用户的分公司id
     */
    private String corpId;
    /**
     * 分公司名称
     */
    private String corpName;

    /***************************************************************************************************/

    private Long supplierLoginId;

    /**
     * 供应商code
     **/
    private String supplierCode;

    /**
     * 账号状态1:启用0:禁用,2注销,3离职
     */
    private Integer status;

    /**
     * 用户员工id
     *
     * @deprecated use  {@link com.corpgovernment.common.base.BaseUserInfo#uid} instead
     **/
    @Deprecated
    private String userId;
    /**
     * 账户名
     */
    private String accountName;

    private String loginType;

    /**
     * 是否服务商管理员管理员
     */
    private Boolean isAdmin;

    /**
     * 最近一次更新密码的时间，null为单点登录，不校验
     */
    private Date setPasswordDate;
    /**
     * 租户id
     */
    private String tenantId;

    private Long roleId;

    private Boolean dataPermissionControl = Boolean.FALSE;

    private String resourceInfo;

    private Boolean valid;

    private Map<String, Org> orgGroup;

    public boolean isSupplierUser() {
        return "SUPPLIER".equalsIgnoreCase(getSource());
    }

    @Data
    public static class Org implements Serializable {

        private static final long serialVersionUID = 5923805756979809323L;

        /**
         * 前台用户的组织id
         * 有可能是部门id、也有可能是公司id
         */
        private String orgId;

        /**
         * 前台用户的组织名称
         */
        private String orgName;

        /**
         * 前台用户的分公司id
         */
        private String corpId;

        /**
         * 前台用户的分公司名称
         */
        private String corpName;
    }
}
